package com.coursehub.course.service;

import com.coursehub.course.dto.ClassesCreateDto;
import com.coursehub.course.entity.Classes;

import java.util.List;

/**
 * 班级服务接口
 */
public interface ClassesService {
    
    /**
     * 创建班级
     */
    Classes createClass(ClassesCreateDto createDto);
    
    /**
     * 根据ID获取班级
     */
    Classes getClassById(String classesId);
    
    /**
     * 获取所有班级
     */
    List<Classes> getAllClasses();
    
    /**
     * 根据课程ID获取班级列表
     */
    List<Classes> getClassesByCourseId(String courseId);
    
    /**
     * 更新班级信息
     */
    Classes updateClass(String classesId, ClassesCreateDto updateDto);
    
    /**
     * 删除班级
     */
    void deleteClass(String classesId);
    
    /**
     * 检查班级是否存在
     */
    boolean existsByClassesId(String classesId);
    
    /**
     * 检查班级名称是否存在
     */
    boolean existsByClassesName(String classesName);
    
    /**
     * 根据班级名称搜索班级
     */
    List<Classes> searchClassesByName(String classesName);
    
    /**
     * 根据班级ID获取课程ID
     */
    String getCourseIdByClassId(String classesId);
    
    /**
     * 根据班级ID获取学生ID列表
     */
    List<String> getStudentIdsByClassId(String classesId);
    
    /**
     * 根据班级ID获取教师ID列表
     */
    List<String> getTeacherIdsByClassId(String classesId);
    
    /**
     * 向班级添加学生
     */
    void addStudentToClass(String classesId, String userId);
    
    /**
     * 从班级移除学生
     */
    void removeStudentFromClass(String classesId, String userId);
    
    /**
     * 向班级添加教师
     */
    void addTeacherToClass(String classesId, String userId);
    
    /**
     * 从班级移除教师
     */
    void removeTeacherFromClass(String classesId, String userId);
    
    /**
     * 检查学生是否在班级中
     */
    boolean isStudentInClass(String classesId, String userId);
    
    /**
     * 检查教师是否在班级中
     */
    boolean isTeacherInClass(String classesId, String userId);
    
    /**
     * 根据课程ID和用户ID获取用户作为教师的所有班级
     */
    List<Classes> getClassesAsTeacher(String courseId, String userId);
    
    /**
     * 根据课程ID和用户ID获取班级ID（用户在该课程下的第一个班级）
     */
    String getClassesIdByCourseAndUser(String courseId, String userId);
}